package com.vhall.component.service.room.event.handler.inav;

import com.vhall.component.service.room.event.handler.AbstractEventHandler;
import com.vhall.component.service.room.event.handler.EventHandlerType;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import static com.vhall.component.service.room.event.EventConstant.USER_PUBLISH_STOP;

/**
 * 互动房间有人停止推流
 *
 * @author jingwen.li
 * @date 2023/2/16
 */
@Slf4j
@Component
@EventHandlerType(USER_PUBLISH_STOP)
public class UserPublishStopEventHandler extends AbstractEventHandler {
    @Override
    public void handle(Map<String, Object> callBack) {
//        room_id	string	互动房间号
//        unique_id	string	互动成员会话唯一ID
//        user_id	string	互动成员用户ID
//        stream_id	string	互动成员推流流ID标识
//        event_ts	long	Unix 时间戳，事件产生时间戳
//        time	long	Unix 时间戳，底层事件上报时间戳
//        event	string	事件类型名称，为“UserPublishStop”
//        reason	int	停止推流原因
//        0，客户端正常停止推流
//        400，客户端异常停止推流
//        500， 服务端内部异常停止推流
//        其它，websocket连接断开导致停止推流，见 websocket 状态码
//        app_id	string	应用ID
        log.info("收到互动房间停止推流事件：{}, 事件详情：{}", USER_PUBLISH_STOP, callBack);
        long ts = (long) callBack.get("event_ts");
        Date date = new Date();
        date.setTime(ts);
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        log.info("互动房间：{}, user[unique_id={}]:{},在[{}]停止推流, 原因:{}",
                callBack.get("room_id"),
                callBack.get("unique_id"),
                callBack.get("user_id"),
                sf.format(date),
                callBack.get("reason"));
    }
}
